/*
 * @lc app=leetcode.cn id=34 lang=java
 *
 * [34] 在排序数组中查找元素的第一个和最后一个位置
 */

// @lc code=start
class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] result = new int[2];
        result[0]=findFirst(nums, target);
        result[1]=findLast(nums, target);
        return result;
    }

    /* 
     * 二分查找左边第一个等于target的下标，则right需要不断往左调整
    */
    public int findFirst(int[] nums,int target){
        int left=0;
        int right=nums.length-1;
        int idx=-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(nums[mid]>=target){//代表右边都是小于等于target的数
                right=mid-1;//right往左调整
            }else{
                left=mid+1;
            }
            if(nums[mid]==target) idx=mid;//每次更新下坐标
        }
        return idx;
    }
    /* 
     * 二分查找右边最后等于target的下标，则left需要不断往右调整
    */
    public int findLast(int[] nums,int target){
        int left=0;
        int right=nums.length-1;
        int idx=-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(nums[mid]<=target){//代表左边都是小于等于taget的数
                left=mid+1;//left往右调整
            }else{
                right=mid-1;
            }
            if(nums[mid]==target) idx=mid;//每次更新下坐标
        }
        return idx;
    }
    
}
// @lc code=end

